# -*- coding: utf-8 -*-
"""
基础配置 - 所有爬虫共用的配置
"""

# Redis配置 - 使用不同DB区分任务类型
REDIS_CONFIG = {
    'host': '127.0.0.1',
    'port': 6379,
    'password': None,
    'decode_responses': True
}

# Redis数据库分配
REDIS_DBS = {
    'list_tasks': 0,        # 列表页任务
    'detail_tasks': 1,      # 详情页任务
    'list_failed': 2,       # 列表页失败任务
    'detail_failed': 3,     # 详情页失败任务
    'completed_data': 4,    # 已完成数据
    'url_mapping': 5,       # URL映射关系
    'stats': 8              # 统计信息
}

# 代理配置 - 支持隧道代理和IP代理池
PROXY_CONFIG = {
    'USE_PROXY': True,
    'PROXY_TYPE': 'tunnel',  # 'tunnel' 或 'pool'
    # 'TUNNEL_PROXY': {},
    'TUNNEL_PROXY': {'http': 'http://t15090909579996:i6bju70q@k352.kdltps.com:15818',
                    'https': 'http://t15090909579996:i6bju70q@k352.kdltps.com:15818'},
    # 'TUNNEL_PROXY': {'http': 'http://t16094948662061:wu58lolg@v293.kdltpspro.com:15818',
    #                 'https': 'http://t16094948662061:wu58lolg@v293.kdltpspro.com:15818'},
    'PROXY_POOL': [
        'http://proxy1:port',
        'http://proxy2:port',
        'http://proxy3:port',
    ],
    'PROXY_ROTATION': True,  # 是否轮换代理
    'PROXY_TIMEOUT': 10,     # 代理超时时间
    'PROXY_RETRY': 3         # 代理重试次数
}

# 日志配置
LOG_CONFIG = {
    'level': 'DEBUG',
    'format': '%(asctime)s - %(levelname)s - %(threadName)s - %(message)s',
    'file_encoding': 'utf-8',
    'max_bytes': 10 * 1024 * 1024,  # 单个日志文件最大10MB
    'backup_count': 5                 # 保留5个备份文件（总计60MB）
}

# Redis键名配置 - 会自动添加spider_name前缀
REDIS_KEYS = {
    'LIST_TASKS': 'tasks',                      # 列表页任务队列
    'DETAIL_TASKS': 'tasks',                    # 详情页任务队列
    'LIST_FAILED': 'failed',                    # 列表页失败任务队列
    'DETAIL_FAILED': 'failed',                  # 详情页失败任务队列
    'COMPLETED_DATA': 'data',                   # 已完成数据存储
    'URL_MAPPING': 'url_mapping',              # URL映射
    'STATS': 'stats',                           # 统计信息
    'TASK_LOCK': 'lock'                         # 任务锁
}

def get_redis_key(key_name: str, spider_name: str) -> str:
    """获取带spider_name前缀的Redis key"""
    base_key = REDIS_KEYS.get(key_name, key_name)
    return f"{spider_name}:{base_key}"

